package domein.Models;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import persistentie.LandenMapper;
import persistentie.LocatiesMapper;

import java.sql.SQLException;
import domein.DomeinController;
import domein.Locatie;
import domein.WereldMapper;

public class WereldTreeModel extends DefaultTreeModel {
	
	private LandenMapper landenMapper = new LandenMapper();
	private LocatiesMapper locatieMapper = new LocatiesMapper();
	private WereldMapper wereldMapper;

	public WereldTreeModel(DomeinController domeinController) throws IllegalStateException, SQLException, ClassNotFoundException {
		super(new WereldMapper(domeinController).makeTreeModel());
		wereldMapper = new WereldMapper(domeinController);
	}

	public void landToevoegen(Object geselecteerdeNode, String naam, String code ) {
		
		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) geselecteerdeNode;

		if (parent == null)
			throw new IllegalArgumentException("no node selected");
	
		try {		
			landenMapper.schrijf(parent,naam,code);
			this.insertNodeInto(new DefaultMutableTreeNode(naam), parent, parent.getChildCount());
		} 
		
		catch (SQLException e) {
			e.printStackTrace();
		} 
		
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public int lokatieToevoegen(Object geselecteerdeNode, String naamLocatie,float breedtegraad, float lengtegraad, int hoogte ) {
		
		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) geselecteerdeNode;
		int sleutel = -2;

		if (parent == null)
			throw new IllegalArgumentException("no node selected");
	
		try 
		
		{			
			locatieMapper.schrijf(parent,naamLocatie,breedtegraad,lengtegraad,hoogte);
			sleutel = locatieMapper.getLaatsteSleutel();
			
			this.insertNodeInto(new DefaultMutableTreeNode(naamLocatie), parent,parent.getChildCount());	
		}
		
		catch (SQLException e) {
			e.printStackTrace();
		} 
		
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		return sleutel;

	}

	public void locatieVerwijderen(Object geselecteerdeNode) {

		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) geselecteerdeNode;
		if (parent == null)
			throw new IllegalArgumentException("no node selected");

		try 
		
		{			
			locatieMapper.verwijder(parent);
			this.removeNodeFromParent(parent);
					
		}
		
		catch (SQLException e) {
			e.printStackTrace();
		} 
		
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		
		
	}
	

}